package lol.clann.minecraft.springboot.api.service;

import com.ruoshui.utils.java.annotation.Nonnull;
import com.ruoshui.utils.java.annotation.Nullable;

import java.util.List;
import java.util.Map;

/**
 * 用来管理各种flag, 各个插件就不用自己管理了
 *
 * @author: zyp
 * @date: 2020/10/19 11:15 上午
 */

public interface FlagService {

    /**
     * 注册flag
     * 必须先注册在使用
     *
     * @param key
     * @return
     */
    public void register(@Nonnull String key);

    public String unregister(@Nonnull String key);

    /**
     * 设置flag
     *
     * @param key
     * @param value 会序列化成字符串进行存储
     * @return 被替换掉的值
     */
    public String set(@Nonnull String key, @Nullable Object value);

    public String get(@Nonnull String key);

    public <T> T get(@Nonnull String key, Class<T> type);

    public <T> T get(@Nonnull String key, Class<T> type, T defaultValue);

    public List<String> getAllFlagKeys();

    public Map<String, String> getAllFlags();
}
